package com.rrd.dw.mr.orc;

import org.apache.hadoop.io.MapWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
import org.apache.orc.mapred.OrcList;
import org.apache.orc.mapred.OrcMap;
import org.apache.orc.mapred.OrcStruct;

public class ConstructUserMap {

    private static void parseTextFiled(MapWritable mp, String k,
            WritableComparable v) {
        if (v != null) { // 工作领域
            mp.put(new Text(k), v);
        }
    }

    /**
     * 构建pdl 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void pdlConstruct2(MapWritable mp, OrcStruct value) {
        parseTextFiled(mp, "mobile", value.getFieldValue(2)); // 手机号
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(3)); // 手机号md5
        parseTextFiled(mp, "mobile_off", value.getFieldValue(4)); // 手机号掩码
        parseTextFiled(mp, "gender", value.getFieldValue(8)); // 性别
        parseTextFiled(mp, "edu", value.getFieldValue(10)); // 学历
        parseTextFiled(mp, "pid", value.getFieldValue(5)); // 身份证号
        parseTextFiled(mp, "pid_md5", value.getFieldValue(6)); // 身份证号md5
        parseTextFiled(mp, "pid_off", value.getFieldValue(7)); // 身份证号掩码

        parseTextFiled(mp, "age", value.getFieldValue(9)); // 年龄
        parseTextFiled(mp, "regist_time", value.getFieldValue(62)); // 注册时间
    }

    /**
     * 构建pdl 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void pdlConstruct(MapWritable mp, OrcStruct value) {
        parseTextFiled(mp, "src_user_id", value.getFieldValue(0));
        parseTextFiled(mp, "src_unique_id", value.getFieldValue(1));
        parseTextFiled(mp, "mobile", value.getFieldValue(2));
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(3));
        parseTextFiled(mp, "mobile_off", value.getFieldValue(4));
        parseTextFiled(mp, "pid", value.getFieldValue(5)); // 身份证号
        parseTextFiled(mp, "pid_md5", value.getFieldValue(6)); // 身份证号
        parseTextFiled(mp, "pid_off", value.getFieldValue(7)); // 身份证号

        parseTextFiled(mp, "gender", value.getFieldValue(8)); // 性别
        parseTextFiled(mp, "age", value.getFieldValue(9)); // 工年龄
        parseTextFiled(mp, "edu", value.getFieldValue(10)); // 学历
        parseTextFiled(mp, "marriage", value.getFieldValue(11)); // 婚姻状况结婚
        parseTextFiled(mp, "children", value.getFieldValue(12)); // 是否有孩子
        parseTextFiled(mp, "pid_region", value.getFieldValue(13)); // 户籍所属大区
        parseTextFiled(mp, "pid_province", value.getFieldValue(14)); // 户籍省地址
        parseTextFiled(mp, "pid_city", value.getFieldValue(15)); // 户籍市
        parseTextFiled(mp, "pid_county", value.getFieldValue(16)); // 户籍市
        parseTextFiled(mp, "pid_address", value.getFieldValue(17)); // 户籍地址
        parseTextFiled(mp, "pid_address_off", value.getFieldValue(18)); // 户籍地址
        parseTextFiled(mp, "work_region", value.getFieldValue(19));// 工作地所属大区
        parseTextFiled(mp, "work_provice", value.getFieldValue(23)); // 工作地省
        parseTextFiled(mp, "work_city", value.getFieldValue(24)); // 工作地市
        parseTextFiled(mp, "work_county", value.getFieldValue(25)); // 工作县/区
        parseTextFiled(mp, "industry", value.getFieldValue(26));// 工作领域
        parseTextFiled(mp, "company_position", value.getFieldValue(27)); // 工作类型
        parseTextFiled(mp, "work_period", value.getFieldValue(28)); // 工作年限
        parseTextFiled(mp, "payday", value.getFieldValue(29)); // 发薪日
        parseTextFiled(mp, "salary", value.getFieldValue(30)); // 收入情况
        parseTextFiled(mp, "company_name", value.getFieldValue(31)); // 公司名称

        parseTextFiled(mp, "home_region", value.getFieldValue(32)); // 家庭地址所属大区
        parseTextFiled(mp, "home_provice", value.getFieldValue(36)); // 家庭地址所属省
        parseTextFiled(mp, "home_city", value.getFieldValue(37)); // 家庭地址所属市
        parseTextFiled(mp, "home_county", value.getFieldValue(38)); // 家庭地址所属区
        parseTextFiled(mp, "home_address", value.getFieldValue(39)); // 家庭地址
        parseTextFiled(mp, "home_address_off", value.getFieldValue(40)); // 家庭地址

        parseTextFiled(mp, "live_time", value.getFieldValue(41)); // 居住时长

        parseTextFiled(mp, "ip", value.getFieldValue(42)); // 访问IP地址
        parseTextFiled(mp, "login_provice", value.getFieldValue(43)); // 访问地省
        parseTextFiled(mp, "login_city", value.getFieldValue(44)); // 访问地市
        parseTextFiled(mp, "login_county", value.getFieldValue(45)); // 访问地县/区

        parseTextFiled(mp, "advert_job", value.getFieldValue(46)); // 大学生标签
        parseTextFiled(mp, "channel", value.getFieldValue(47)); // 安装渠道
        parseTextFiled(mp, "source", value.getFieldValue(48)); // 来源
        parseTextFiled(mp, "medium", value.getFieldValue(49)); // 媒体
        parseTextFiled(mp, "campaign", value.getFieldValue(50)); // 活动
        parseTextFiled(mp, "register_channel", value.getFieldValue(51)); // 注册渠道
        parseTextFiled(mp, "phone_platform", value.getFieldValue(52)); // 手机平台
        parseTextFiled(mp, "device", value.getFieldValue(53)); // 手机型号
        parseTextFiled(mp, "carrier_code", value.getFieldValue(54)); // 运营商
        parsejp(mp, value.getFieldValue(55));// 竞品软件
        parsePerson(mp, value.getFieldValue(56));// 预留联系人电话、关系
        parseTextFiled(mp, "taobao_account", value.getFieldValue(57)); // 淘宝
        parseTextFiled(mp, "email", value.getFieldValue(58)); // email
        parseTextFiled(mp, "email_md5", value.getFieldValue(59)); // email
        parseTextFiled(mp, "email_off", value.getFieldValue(60)); // email

        parseTextFiled(mp, "is_del",
            new Text(value.getFieldValue(61).toString())); // 0:正常
                                                                                       // 1：删除
        parseTextFiled(mp, "regist_time", value.getFieldValue(62)); // 注册时间
        parseTextFiled(mp, "is_active", value.getFieldValue(63)); // 是否激活
        parseTextFiled(mp, "active_time", value.getFieldValue(64)); // 激活时间

    }

    /**
     * 构建YM 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void yimeiConstruct2(MapWritable mp, OrcStruct value) {
        parseTextFiled(mp, "pid", value.getFieldValue(21)); // 身份证
        parseTextFiled(mp, "pid_md5", value.getFieldValue(22)); // 身份证md5
        parseTextFiled(mp, "pid_off", value.getFieldValue(23)); // 身份证掩码
        parseTextFiled(mp, "mobile", value.getFieldValue(2)); // 电话
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(3)); // 电话md5
        parseTextFiled(mp, "mobile_off", value.getFieldValue(4)); // 电话yan
        parseTextFiled(mp, "gender", value.getFieldValue(8)); // 性别
        parseTextFiled(mp, "age", value.getFieldValue(9)); // 年龄
        parseTextFiled(mp, "edu", value.getFieldValue(11)); // 学历名称
        parseTextFiled(mp, "regist_time", value.getFieldValue(5)); // 注册时间
    }

    /**
     * 构建YM 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void yimeiConstruct(MapWritable mp, OrcStruct value) {
        parseTextFiled(mp, "src_user_id", value.getFieldValue(0));
        parseTextFiled(mp, "src_unique_id", value.getFieldValue(1));
        parseTextFiled(mp, "mobile", value.getFieldValue(2));
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(3));
        parseTextFiled(mp, "mobile_off", value.getFieldValue(4));

        parseTextFiled(mp, "regist_time", value.getFieldValue(5)); // 注册时间
        parseTextFiled(mp, "industry", value.getFieldValue(6));// 工作领域
        parseTextFiled(mp, "company_position", value.getFieldValue(7)); // 工作类型
        parseTextFiled(mp, "gender", value.getFieldValue(8)); // 性别
        parseTextFiled(mp, "age", value.getFieldValue(9)); // 年龄
        parseTextFiled(mp, "edu", value.getFieldValue(11)); // 学历名称

        parseTextFiled(mp, "pid_address", value.getFieldValue(12)); // 户籍地址
        parseTextFiled(mp, "pid_address_off", value.getFieldValue(14)); // 户籍地址

        parseTextFiled(mp, "pid_province", value.getFieldValue(15)); // 户籍省地址
        parseTextFiled(mp, "pid_city", value.getFieldValue(16)); // 户籍市
        parseTextFiled(mp, "pid_county", value.getFieldValue(17)); // 户籍市
        parseTextFiled(mp, "ip", value.getFieldValue(18)); // 访问IP地址

        parseTextFiled(mp, "channel", value.getFieldValue(19)); // 安装渠道
        parseTextFiled(mp, "register_channel", value.getFieldValue(20)); // 注册渠道
        parseTextFiled(mp, "pid", value.getFieldValue(21)); // 身份证号
        parseTextFiled(mp, "pid_md5", value.getFieldValue(22)); // 身份证号
        parseTextFiled(mp, "pid_off", value.getFieldValue(23)); // 身份证号

        parseTextFiled(mp, "marriage", value.getFieldValue(24)); // 婚姻状况结婚
        parseTextFiled(mp, "children", value.getFieldValue(25)); // 是否有孩子
        parseTextFiled(mp, "phone_platform", value.getFieldValue(26)); // 手机平台
        parseTextFiled(mp, "device", value.getFieldValue(27)); // 手机型号
        parsePerson(mp, value.getFieldValue(28));// 预留联系人电话、关系
        parseTextFiled(mp, "company_name", value.getFieldValue(32)); // 公司名称
        parseTextFiled(mp, "company_position", value.getFieldValue(34)); // 工作类型
        parseTextFiled(mp, "salary", value.getFieldValue(35)); // 收入情况

    }

    /**
     * 构建rrd 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void rrdConstruct2(MapWritable mp, OrcStruct value) {
        parseTextFiled(mp, "pid", value.getFieldValue(6)); // 身份证
        parseTextFiled(mp, "pid_md5", value.getFieldValue(7)); // 身份证md5
        parseTextFiled(mp, "pid_off", value.getFieldValue(8)); // 身份证掩码

        parseTextFiled(mp, "mobile", value.getFieldValue(3)); // 电话
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(4)); // 电话MD5
        parseTextFiled(mp, "mobile_off", value.getFieldValue(5)); // 电话掩码
        parseTextFiled(mp, "gender", value.getFieldValue(11)); // 性别
        parseTextFiled(mp, "age", value.getFieldValue(12)); // 年龄
        parseTextFiled(mp, "edu", value.getFieldValue(13)); // 学历名称
        parseTextFiled(mp, "regist_time", value.getFieldValue(9)); // 注册时间
    }

    /**
     * 构建rrd 用户map信息
     * 
     * @param mp
     * @param value
     */
    public static void rrdConstruct(MapWritable mp, OrcStruct value) {

        parseTextFiled(mp, "src_user_id", value.getFieldValue(0));
        parseTextFiled(mp, "src_unique_id", value.getFieldValue(1));
        parseTextFiled(mp, "user_name", value.getFieldValue(2));
        parseTextFiled(mp, "mobile", value.getFieldValue(3));
        parseTextFiled(mp, "mobile_md5", value.getFieldValue(4));
        parseTextFiled(mp, "mobile_off", value.getFieldValue(5));

        parseTextFiled(mp, "pid", value.getFieldValue(6)); // 身份证号
        parseTextFiled(mp, "pid_md5", value.getFieldValue(7)); // 身份证号
        parseTextFiled(mp, "pid_off", value.getFieldValue(8)); // 身份证号
        parseTextFiled(mp, "regist_time", value.getFieldValue(9)); // 注册时间
        parseTextFiled(mp, "industry", value.getFieldValue(10));// 工作领域
        parseTextFiled(mp, "gender", value.getFieldValue(11)); // 性别
        parseTextFiled(mp, "age", value.getFieldValue(12)); // 工年龄
        parseTextFiled(mp, "edu", value.getFieldValue(13)); // 学历
        parseTextFiled(mp, "graduate_time", value.getFieldValue(14)); // 毕业时间
        parseTextFiled(mp, "pid_region", value.getFieldValue(15)); // 户籍所属大区
        parseTextFiled(mp, "pid_province", value.getFieldValue(16)); // 户籍省地址
        parseTextFiled(mp, "pid_city", value.getFieldValue(17)); // 户籍市
        parseTextFiled(mp, "pid_county", value.getFieldValue(18)); // 户籍市
        parseTextFiled(mp, "pid_address", value.getFieldValue(19)); // 户籍地址
        parseTextFiled(mp, "pid_address_off", value.getFieldValue(20)); // 户籍地址
        parseTextFiled(mp, "company_name", value.getFieldValue(21)); // 公司名称

        parseTextFiled(mp, "work_region", value.getFieldValue(25));// 工作地所属大区
        parseTextFiled(mp, "work_provice", value.getFieldValue(26)); // 工作地省
        parseTextFiled(mp, "work_city", value.getFieldValue(27)); // 工作地市
        parseTextFiled(mp, "work_county", value.getFieldValue(28)); // 工作县/区

        parseTextFiled(mp, "home_region", value.getFieldValue(32)); // 家庭地址所属大区
        parseTextFiled(mp, "home_provice", value.getFieldValue(33)); // 家庭地址所属省
        parseTextFiled(mp, "home_city", value.getFieldValue(34)); // 家庭地址所属市
        parseTextFiled(mp, "home_county", value.getFieldValue(35)); // 家庭地址所属区
        parseTextFiled(mp, "home_address", value.getFieldValue(36)); // 家庭地址
        parseTextFiled(mp, "home_address_off", value.getFieldValue(37)); // 家庭地址
        parseTextFiled(mp, "ip", value.getFieldValue(38)); // 访问IP地址
        parseTextFiled(mp, "login_provice", value.getFieldValue(39)); // 访问地省
        parseTextFiled(mp, "login_city", value.getFieldValue(40)); // 访问地市
        parseTextFiled(mp, "login_county", value.getFieldValue(41)); // 访问地县/区
        parseTextFiled(mp, "advert_job", value.getFieldValue(42)); // 大学生标签
        parseTextFiled(mp, "channel", value.getFieldValue(43)); // 安装渠道
        parseTextFiled(mp, "source", value.getFieldValue(44)); // 来源
        parseTextFiled(mp, "medium", value.getFieldValue(45)); // 媒体
        parseTextFiled(mp, "campaign", value.getFieldValue(46)); // 活动
        parseTextFiled(mp, "register_channel", value.getFieldValue(47)); // 注册渠道
        parseTextFiled(mp, "phone_platform", value.getFieldValue(48)); // 手机平台
        parseTextFiled(mp, "carrier_code", value.getFieldValue(49)); // 运营商
        parsejp(mp, value.getFieldValue(50));// 竞品软件
        parseTextFiled(mp, "is_active", value.getFieldValue(51)); // 是否激活
        parseTextFiled(mp, "active_time", value.getFieldValue(52)); // 激活时间
        parsePerson(mp, value.getFieldValue(53));// 预留联系人电话、关系
        parseTextFiled(mp, "email", value.getFieldValue(54)); // email
        parseTextFiled(mp, "email_md5", value.getFieldValue(55)); // email
        parseTextFiled(mp, "email_off", value.getFieldValue(56)); // email

    }

    private static OrcMap<Text, Text> orcMap = null;
    private static Text jpText = new Text();
    private static Text personText = new Text();
    private static OrcList<Text> orcList = null;

    private static void parsePerson(MapWritable mp, WritableComparable value) {
        if (value != null) {
            orcMap = (OrcMap<Text, Text>) value;
            String jpstr = orcMap.toString();
            if (orcMap.size() > 0) {
                personText.set(jpstr.substring(1, jpstr.length() - 1));
            } else {
                personText.set("");
            }
            mp.put(new Text("pre_ctact_person"), personText);
        }
    }

    private static void parsejp(MapWritable mp, WritableComparable value) {
        if (value != null) {
            orcList = (OrcList<Text>) value;
            String jpstr = orcList.toString();
            if (orcList.size() > 0) {
                jpText.set(jpstr.substring(1, jpstr.length() - 1).trim());
            } else {
                jpText.set("");
            }
            mp.put(new Text("competition_app_list"), jpText);
        }
    }

    public static String getSchema() {

        StringBuilder sb = new StringBuilder();
        sb.append("struct<");
        sb.append(
            "col0:string,_col1:string,_col2:array<string>,_col3:array<string>,_col4:string,_col5:string,_col6:string,_col7:string");
        sb.append(
            ",_col8:string,_col9:string,_col10:string,_col11:string,_col12:string,_col13:string,_col14:string,_col15:string");
        sb.append(
            ",_col16:string,_col17:string,_col18:string,_col19:string,_col20:string,_col21:string,_col22:string");
        sb.append(
            ",_col23:string,_col24:string,_col25:string,_col26:string,_col27:string,_col28:string,_col29:string");
        sb.append(
            ",_col30:string,_col31:string,_col32:string,_col33:string,_col34:string,_col35:string");
        sb.append(
            ",_col36:string,_col37:string,_col38:string,_col39:string,_col40:string,_col41:string");
        sb.append(
            ",_col42:string,_col43:string,_col44:string,_col45:string,_col46:string,_col47:string");
        sb.append(
            ",_col48:string,_col49:string,_col50:string,_col51:string,_col52:string,_col53:string");
        sb.append(",_col54:array<string>,_col55:string,_col56:string");
        sb.append(
            ",_col57:map<string,string>,_col58:string,_col59:string,_col60:string");
        sb.append(",_col61:string,_col62:string");

        sb.append(">");

        return sb.toString();
    }

    public static void main(String[] args) {

    }
}
